// 知识点1：new内存分配与对象构造组合在了一起，而allocator将内存分配和对象构造分离，它提供一种类型感知的内存分配方法，它分配的内存时原始的、未构造的
// 知识点2：利用allocator分配内存之后。必须在经过construnct进行构造对象，两个参数分别为：创建对象位置的指针，元素类型的值
// 知识点3：对构造后的元素进行destory操作，销毁对象，deallocator
#include <algorithm>
#include <cctype> //ctype无法打开，包含tolower()函数和ispunct函数
#include <fstream>
#include <iostream>
#include <list>
#include <map>
#include <memory>
#include <set>
#include <string>
#include <utility> //保存pair的头文件
#include <vector>

using namespace std;

int main(int argc, char **argv) {
  // 	string *const p = new string[10];//构造十个空const string
  // 	string s;
  // 	string *q = p;
  // 	while (cin>>s && q != p+10)
  // 	{
  // 		*q++ = s;
  // 	}
  // 	const size_t size = q-p;
  //	delete [] p;

  string s;
  allocator<string> alloc;
  auto p = alloc.allocate(10); //用的是()，只分配内存
  auto q = p;
  while (cin >> s && q != p + 10) {
    alloc.construct(q++, s); //创建对象并幅值
  }
  while (q != p) {
    alloc.destroy(--q); //逐个销毁对象，destory接受一个指针
  }
  alloc.deallocate(p, 10); //分配多少内存，释放多少

  return 0;
}